package hr.ctg.service.dao;

import hr.ctg.domain.model.Korisnik;
import hr.ctg.domain.model.Objekt;
import hr.ctg.domain.model.Slika;
import hr.jpa.dao.GenericDAOImpl;

import java.util.List;

import javax.persistence.NoResultException;
import javax.persistence.NonUniqueResultException;

import org.hibernate.Session;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;

@Name("slikaDAO")
@AutoCreate
public class SlikaDAO extends GenericDAOImpl<Slika, Integer> {
	@In
	Session session;

	/*
	 * (non-Javadoc)
	 * 
	 * @see hr.ctg.service.data.dao.SlikaDAO#find(int)
	 */
	public Slika find(final int idSlike) {
		return entityManager.find(Slika.class, Integer.valueOf(idSlike));
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see hr.ctg.service.data.dao.SlikaDAO#findByIdObjekta(java.lang.Integer)
	 */
	@SuppressWarnings("unchecked")
	public List<Slika> findByIdObjekta(final Integer idObjekta) {
		return entityManager.createNamedQuery("Slika.findByIdObjekta")
				.setParameter(1, idObjekta).getResultList();

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see hr.ctg.service.data.dao.SlikaDAO#findByIdObjektaP(java.lang.Integer)
	 */
	public Slika findByIdObjektaP(final Integer idObjekta) {
		try {
			return (Slika) session.getNamedQuery("Slika.findByIdObjektaP")
					.setParameter(0, idObjekta).uniqueResult();
		} catch (final NoResultException e) {
			return null;
		} catch (final NonUniqueResultException e) {
			e.printStackTrace();
			return null;
		}
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see hr.ctg.service.data.dao.SlikaDAO#findByIdParkaP(java.lang.Integer)
	 */
	public Slika findByIdParkaP(final Integer idParka) {
		try {
			return (Slika) session.getNamedQuery("Slika.findByIdParkaP")
					.setParameter(0, idParka).uniqueResult();
		} catch (final NoResultException e) {
			return null;
		}
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * hr.ctg.service.data.dao.SlikaDAO#findByKorisnikObjekt(hr.ctg.domain.model
	 * .Korisnik, hr.ctg.domain.model.Objekt)
	 */
	@SuppressWarnings("unchecked")
	public List<Slika> findByKorisnikObjekt(final Korisnik korisnik,
			final Objekt objekt) {
		return entityManager.createNamedQuery("Slika.findByKO").setParameter(1,
				korisnik).setParameter(2, objekt).getResultList();
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see hr.ctg.service.data.dao.SlikaDAO#findCountByIdObjekta(int)
	 */
	public Integer findCountByIdObjekta(final int idObjekta) {
		return Integer.valueOf(((Long) entityManager.createNamedQuery(
				"Slika.findCountByIdObjekta").setParameter(1,
				Integer.valueOf(idObjekta)).getSingleResult()).intValue());
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see hr.ctg.service.data.dao.SlikaDAO#findCountByIdMjesta(int)
	 */
	public Integer findCountByIdMjesta(final int idMjesta) {
		return Integer.valueOf(((Long) entityManager.createNamedQuery(
				"Slika.findCountByIdMjesta").setParameter(1,
				Integer.valueOf(idMjesta)).getSingleResult()).intValue());
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see hr.ctg.service.data.dao.SlikaDAO#findCountByIdOtoka(int)
	 */
	public Integer findCountByIdOtoka(final int idOtoka) {
		return Integer.valueOf(((Long) entityManager.createNamedQuery(
				"Slika.findCountByIdOtoka").setParameter(1,
				Integer.valueOf(idOtoka)).getSingleResult()).intValue());
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see hr.ctg.service.data.dao.SlikaDAO#findByIdMjesta(java.lang.Integer)
	 */
	@SuppressWarnings("unchecked")
	public List<Slika> findByIdMjesta(final Integer idMjesta) {
		return entityManager.createNamedQuery("Slika.findByIdMjesta")
				.setParameter(1, idMjesta).getResultList();
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see hr.ctg.service.data.dao.SlikaDAO#findByIdOtoka(java.lang.Integer)
	 */
	@SuppressWarnings("unchecked")
	public List<Slika> findByIdOtoka(final Integer idOtoka) {
		return entityManager.createNamedQuery("Slika.findByIdOtoka")
				.setParameter(1, idOtoka).getResultList();
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see hr.ctg.service.data.dao.SlikaDAO#findByIdParka(java.lang.Integer)
	 */
	@SuppressWarnings("unchecked")
	public List<Slika> findByIdParka(final Integer idParka) {
		return entityManager.createNamedQuery("Slika.findByIdParka")
				.setParameter(1, idParka).getResultList();
	}

	@SuppressWarnings("unchecked")
	public List<Slika> findByIdDogadjaja(final Integer idDogadjaja) {
		return entityManager.createNamedQuery("Slika.findByIdDogadjaja")
				.setParameter(1, idDogadjaja).getResultList();
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see hr.ctg.service.data.dao.SlikaDAO#findByIdMjestaP(java.lang.Integer)
	 */
	public Slika findByIdMjestaP(final Integer idMjesta) {
		try {
			return (Slika) session.getNamedQuery("Slika.findByIdMjestaP")
					.setParameter(0, idMjesta).uniqueResult();
		} catch (final NoResultException e) {
			return null;
		}
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see hr.ctg.service.data.dao.SlikaDAO#findByIdOtokaP(java.lang.Integer)
	 */
	public Slika findByIdOtokaP(final Integer idOtoka) {
		try {
			return (Slika) session.getNamedQuery("Slika.findByIdOtokaP")
					.setParameter(0, idOtoka).uniqueResult();
		} catch (final NoResultException e) {
			return null;
		}
	}

	public Slika findByIdDogadjajaP(final Integer idDogadjaja) {
		try {
			return (Slika) session.getNamedQuery("Slika.findByIdDogadjajaP")
					.setParameter(0, idDogadjaja).uniqueResult();
		} catch (final NoResultException e) {
			return null;
		} catch (final NonUniqueResultException e) {
			return null;
		}
	}
}